void *_ReturnAddress(void)
DWORD dwReturn = -1; _asm { //int 3 mov eax,[esp + (4 * 4)] mov dwReturn,eax };
// compiler_intrinsics_AddressOfReturnAddress.cpp #include <stdio.h> #ifdef __cplusplus #define EXTERNC extern "C" #else #define EXTERNC #endif // _ReturnAddress and _AddressOfReturnAddress should be prototyped before use EXTERNC void * _AddressOfReturnAddress(void); EXTERNC void * _ReturnAddress(void); #pragma intrinsic(_AddressOfReturnAddress) #pragma intrinsic(_ReturnAddress) /* * This function will print three values: * (1) The address retrieved from _AddressOfReturnAdress * (2) The return address stored at the location returned in (1) * (3) The return address retrieved the _ReturnAddress* intrinsic * * Note that (2) and (3) should be the same address. */ __declspec(noinline) void func(void) { void* pvAddressOfReturnAddress = _AddressOfReturnAddress(); printf("%p\n", pvAddressOfReturnAddress); printf("%p\n", *((void**) pvAddressOfReturnAddress)); printf("%p\n", _ReturnAddress()); } int main(void) { func(); return 0; }
There are 31,316 total registered users.
[+] expand